/**
 * Created by 黄智超 on 2016/7/6.
 * email:362768225@qq.com
 */

//加载模块
var express = require('express');
var app = express();
var mongoose = require('mongoose');                     // mongoose for mongodb
var morgan = require('morgan');             // 在控制台打印请求 (express4)
var bodyParser = require('body-parser');    // 从HTML POST拉取信息 (express4)
var methodOverride = require('method-override'); // 模拟 DELETE 和 PUT (express4)

//配置
mongoose.connect('mongodb://localhost:27017/todoApp');     // 链接本地 mongoDB database

app.use(express.static(__dirname + '/public'));
app.use(morgan('dev'));                                         // 在console打印每个请求
app.use(bodyParser.urlencoded({'extended':'true'}));            // parse application/x-www-form-urlencoded
app.use(bodyParser.json());                                     // parse application/json
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json
app.use(methodOverride());


//定义模型
var Todo = mongoose.model('Todo',{
    text:String
});

//定义路由
//获取所有路由
app.get('/api/todos',function(req, res){
    //使用mongoose获取所有在数据库中的todos
    Todo.find(function(err,todos){
        if(err){
            res.send(err);
        }

        res.json(todos);//返回所有的todos

    })
});
// 创建todo之后返回所有todos
app.post('/api/todos', function(req, res) {

    // 创建一个todo, 信息来自ng的ajax请求
    Todo.create({
        text : req.body.text,
        done : false
    }, function(err, todo) {
        if (err)
            res.send(err);
        // 在创建之后获取并返回所有todos
        Todo.find(function(err, todos) {
            if (err)
                res.send(err)
            res.json(todos);
        });
    });

});
// 删除一个todo
app.delete('/api/todos/:todo_id', function(req, res) {
    Todo.remove({
        _id : req.params.todo_id
    }, function(err, todo) {
        if (err)
            res.send(err);
        
        Todo.find(function(err, todos) {
            if (err)
                res.send(err)
            res.json(todos);
        });
    });
});

app.get('*',function(req,res){
    res.sendfile('./views/index.html'); //加载应用唯一页面
})


// 监听  ======================================
app.listen(8080);
console.log("App在8080端口监听！");